Directly use python’s urllib instead of curl in etc/dl-snapshot.py
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Mon, 17 Nov 2014 20:21:06 +0000 (21:21 +0100)
committerEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Mon, 17 Nov 2014 21:23:06 +0000 (22:23 +0100)
src/etc/dl-snapshot.py

index 64329ac9c9ed54410a6ca0b7a63440f32d990c1d..096b02e60f52b1f02318e8c0bd23e16e0bba6f04 100644 (file)
@@ -1,13 +1,20 @@
 import distutils.spawn
 import hashlib
 import os
-import subprocess
 import sys
 import tarfile
 import shutil
 
-f = open('src/snapshots.txt')
-lines = f.readlines()
+try:
+    from urllib.request import urlopen
+except ImportError:
+    # We are in python2
+    from urllib2 import urlopen as urlopen2
+    from contextlib import closing
+    urlopen = lambda url: closing(urlopen2(url))
+
+with open('src/snapshots.txt') as f:
+    lines = f.readlines()
 
 date = lines[0]
 linux32 = lines[1]
@@ -33,7 +40,7 @@ elif triple == 'x86_64-pc-windows-gnu':
 else:
     raise Exception("no snapshot for the triple: " + triple)
 
-platform, hash = me.strip().split(' ')
+platform, hash = me.strip().split()
 
 tarball = 'cargo-nightly-' + triple + '.tar.gz'
 url = 'https://static-rust-lang-org.s3.amazonaws.com/cargo-dist/' + date.strip() + '/' + tarball
@@ -46,22 +53,22 @@ if not os.path.isdir('target/dl'):
 if os.path.isdir(dst):
     shutil.rmtree(dst)
 
-ret = subprocess.call(["curl", "-o", dl_path, url])
-if ret != 0:
-    raise Exception("failed to fetch url")
-h = hashlib.sha1(open(dl_path, 'rb').read()).hexdigest()
-if h != hash:
-    raise Exception("failed to verify the checksum of the snapshot")
+with urlopen(url) as in_file:
+    data = in_file.read()
+    h = hashlib.sha1(data).hexdigest()
+    if h != hash:
+        raise Exception("failed to verify the checksum of the snapshot")
+    with open(dl_path, 'wb') as out_file:
+        out_file.write(data)
 
-tar = tarfile.open(dl_path)
-for p in tar.getnames():
-    name = p.replace("cargo-nightly-" + triple + "/", "", 1)
-    fp = os.path.join(dst, name)
-    print("extracting " + p)
-    tar.extract(p, dst)
-    tp = os.path.join(dst, p)
-    if os.path.isdir(tp) and os.path.exists(fp):
-        continue
-    shutil.move(tp, fp)
-tar.close()
+with tarfile.open(dl_path) as tar:
+    for p in tar.getnames():
+        name = p.replace("cargo-nightly-" + triple + "/", "", 1)
+        fp = os.path.join(dst, name)
+        print("extracting " + p)
+        tar.extract(p, dst)
+        tp = os.path.join(dst, p)
+        if os.path.isdir(tp) and os.path.exists(fp):
+            continue
+        shutil.move(tp, fp)
 shutil.rmtree(os.path.join(dst, 'cargo-nightly-' + triple))